
/**
 * 功能 图片压缩以及添加水印
 * @param file：一个是文件(类型是图片格式)，或是base64
 * @param obj：{width:375,height:600,quality:0.7,watermark:false}  压缩的宽高及质量,高建议不要设置按比例压缩, watermark为是否添加水印，为true时即添加时间，为string时则原样填加。
 * @param callback：回调函数
 * @return void
 * @example photoCompress(file,obj,callback)
 * 已对图片旋转做了处理
 * @Author: lizuping
 * @Date: 2018-00-00
 * @Last Modified by: lizuping
 * @Last Modified time: 2018-07-12 11:17:19
 */
import ex from './exif.js';
function photoCompress (file, obj, callback) {
    var rs = /^(data:image)/;
    if (typeof file === 'string' && rs.test(file)) {
        canvasDataURL(file, obj, callback, file.split(';')[0].split(':')[1]);
    } else {
        var ready = new FileReader();
        /* 开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容. */
        ready.readAsDataURL(file);
        ready.onload = function () {
            // photoCompress(re, obj, callback);
            canvasDataURL(this.result, obj, callback, file.type);
        };
    }
}
function canvasDataURL (path, obj, callback, t) {
    var img = new Image();
    img.src = path;
    img.onload = function () {
        var that = this;
        ex.getData(that, function () {
            var ro = ex.getTag(this, 'Orientation');
            // 默认按比例压缩
            var w = that.width,
                h = that.height,
                scale = w / h;
            w = obj.width || w;
            h = obj.height || (w / scale);
            var quality = 0.7; // 默认图片质量为0.7
            // 生成canvas
            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');
            function cSet (w, h) {
                var anw = document.createAttribute('width');
                anw.nodeValue = w;
                var anh = document.createAttribute('height');
                anh.nodeValue = h;
                canvas.setAttributeNode(anw);
                canvas.setAttributeNode(anh);
            }
            var th = w * w / h;
            var pi = false;

            if (ro > 1) {
                switch (ro) {
                case 6: // 旋转90度
                    cSet(w, th);
                    pi = Math.PI / 2;
                    ctx.rotate(pi);
                    ctx.drawImage(that, 0, -w, th, w);
                    h = th;
                    break;
                case 3: // 旋转180度
                    cSet(w, h);
                    pi = Math.PI;
                    ctx.rotate(Math.PI);
                    ctx.drawImage(that, -w, -h, w, h);
                    break;
                case 8: // 旋转-90度
                    cSet(w, th);
                    pi = 3 * Math.PI / 2;
                    ctx.rotate(pi);
                    ctx.drawImage(that, -th, 0, th, w);
                    h = th;
                    break;
                }
            } else {
                cSet(w, h);
                ctx.drawImage(that, 0, 0, w, h);
            }
            // 图像质量
            if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
                quality = obj.quality;
            }
            // 增加水印
            if (obj.watermark) {
                ctx.font = '20px sans-serif'; // 设置字体
                ctx.fillStyle = 'rgba( 0 , 122 , 204 , 0.8 )'; // 填充rgba字体颜色
                ctx.textAlign = 'right'; // 文本对齐方式
                if (pi) {
                    ctx.rotate(-pi);
                }
                if (obj.watermark === true) {
                    obj.watermark = new Date().toLocaleString();// 默认水印为当前时间
                }
                ctx.fillText(obj.watermark, w - 20, h - 20);
            }
            // quality值越小，所绘制出的图像越模糊
            // 回调函数返回base64的值
            callback(canvas.toDataURL(t, quality));
        });
    };
}
export default photoCompress;
